#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int N=5e4+10,M=2*N;
int e[M],ne[M],h[N],idx;
int root;
int res;
int st[N];
void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}

int dfs(int u, int fa)
{
    st[u]=1;
    int dist=0;
    int d1=0;
    int d2=0;
    for(int i=h[u];~i;i=ne[i])
    {
        int j=e[i];
        if(j==fa) continue;

        int d=dfs(j,u)+1;
        dist=max(d,dist);

        if(d>d1) d2=d1, d1=d;
        else if(d>d2) d2=d;
    }
    res=max(d1+d2,res);
    return dist;
}
int main()
{
    memset(h,-1,sizeof(h));
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int r=sqrt(i);
        int sum=1;
        for(int j=2;j<=r;j++)
        {
            if(i%j==0)
            {
                sum+=j;
                if(i/j!=j) sum+=i/j;
            }
        }
        if(sum<i)
        {
            add(sum,i);
            add(i,sum);
        }
    }

    for(int i=1;i<=n;i++)
    {
        if(st[i]) continue;
        dfs(i,-1);
    }

    cout<<res;
    return 0;
}
